package com.pm.megapinhata.client.view.models;


import com.pm.megapinhata.client.constants.NavigationContext;
import com.smartgwt.client.widgets.layout.Layout;
import com.smartgwt.client.widgets.layout.VLayout;

public abstract class LayoutAbstractPrincipalView extends VLayout {

	public LayoutAbstractPrincipalView() {
		this("1175", null);
	}

	public LayoutAbstractPrincipalView(String width, String height) {
		if (width == null) {
			setWidth100();
		} else {
			setWidth(width);
		}
		if (height == null) {
			setHeight100();
		} else {
			setHeight(height);
		}

	}

	/**
	 * Responsável por iniciar o carregamento da página
	 * Coloque o código de montagem da view neste método e chame o mesmo pelo construtor
	 * da classe, assim fica fácil identificar tarefas exclusivas de montagem da tela de outras
	 * tarefas necessárias que possa ser necessário na implementação.
	 * 
	 * @param layout
	 */
	protected abstract void montaView(LayoutAbstractMiddleView<Layout> layout);
	
	/**
	 * Retorna o conteúdo do meio para inserir eventos, sobrepor com carregamento
	 * etc...
	 * @return
	 */
	public abstract LayoutAbstractMiddleView<Layout> getMiddleLayout();
	
	/**
	 * Implemente para alterar o conteúdo da tela dinamicamente.
	 * Não utilizar para alterar telas, por exemplo: não alterar de LoginBasicView
	 * para LayoutBasicView, pois o que está sendo alterada é toda a tela
	 * e não somente o conteúdo central.
	 * Um exemplo de utilização é: Alterar de CadastroComissaoView para 
	 * CadastroBonusView já que são conteúdos centrais da mesma tela, LayoutBasicView
	 * @param middleLayout
	 * @param navegacaoContexto
	 */
	public abstract void alteraConteudoCentral(LayoutAbstractMiddleView<Layout> middleLayout, NavigationContext navegacaoContexto);
}
